package utils

import (
	"testing"
	"time"
)

func TestInit(t *testing.T) {
	_, _, err := Init("../.env", "../users.json")
	if err != nil {
		t.Errorf("Функция Init() выполнилась с ошибкой. Проверьте наличие .env файла с прописанными полями"+
			"\"TELEGRAM_APITOKEN\" (токен бота) и \"CHAT_ID\" (ID беседы). Текст ошибки: %v", err)
	}
}

func TestParseUser(t *testing.T) {
	testTable := []struct {
		input    string
		expected User
	}{
		{
			input: "Иван Иванов 01.02.2001",
			expected: User{
				FirstName: "Иван",
				LastName:  "Иванов",
				Birthday:  time.Date(2001, 2, 1, 0, 0, 0, 0, time.UTC),
			},
		},
		{
			input: "Петр Петров 2/1/2002",
			expected: User{
				FirstName: "Петр",
				LastName:  "Петров",
				Birthday:  time.Date(2002, 1, 2, 0, 0, 0, 0, time.UTC),
			},
		},
		{
			input: "Сидор Сидоров 3.07/2003",
			expected: User{
				FirstName: "Сидор",
				LastName:  "Сидоров",
				Birthday:  time.Date(2003, 7, 3, 0, 0, 0, 0, time.UTC),
			},
		},
		{
			input: "Алексей Алексеев 15/4.2004",
			expected: User{
				FirstName: "Алексей",
				LastName:  "Алексеев",
				Birthday:  time.Date(2004, 4, 15, 0, 0, 0, 0, time.UTC),
			},
		},
		{
			input:    "Андрей 5.5.2005",
			expected: User{},
		},
		{
			input:    "Андрей Андреев",
			expected: User{},
		},
		{
			input:    "Андрей 5.5.2005 Андреев",
			expected: User{},
		},
		{
			input:    "20.10.1978",
			expected: User{},
		},
		{
			input:    "Иван Иванов 01.02.2001 Иванович",
			expected: User{},
		},
	}

	for _, testCase := range testTable {
		result, err := ParseUser(testCase.input)
		if result != testCase.expected {
			t.Errorf("Функция ParseUser(%v) вернула %v, ожидалось %v", testCase.input, result, testCase.expected)
		}
		if err != nil {
			t.Logf("Функция ParseUser(%s) вернула ошибку: %v", testCase.input, err)
		}
	}
}
